package com.gitee.qdbp.general.common.api.site.model.content;

import java.io.Serializable;
import java.util.Date;
import com.gitee.qdbp.base.annotation.DataIsolation;
import com.gitee.qdbp.base.annotation.OperateTraces;
import com.gitee.qdbp.base.enums.DataState;
import com.gitee.qdbp.general.common.enums.UsingState;

/**
 * 内容发布实体类
 *
 * @author zhh
 * @version 171012
 */
@OperateTraces(id = "id")
@DataIsolation("tenantCode")
public class ContentPublishBean implements Serializable {

    /** 版本序列号 **/
    private static final long serialVersionUID = 1L;

    /** 表名 **/
    public static final String TABLE = "gn_content_publish";

    /** 主键 **/
    private String id;

    /** 租户编号 **/
    private String tenantCode;

    /** 分类编号 **/
    private String categoryCode;

    /** 位置编号 **/
    private String placeCode;

    /** 内容编号 **/
    private String contentCode;

    /** 标题 **/
    private String contentTitle;

    /** 内容 **/
    private ContentValue contentValue;

    /** 描述 **/
    private String contentDesc;

    /** 排序值(越小越靠前) **/
    private Integer sortIndex;

    /** 选项 **/
    private ContentPublishOptions options;

    /** 创建时间 **/
    private Date createTime;

    /** 激活时间 **/
    private Date activeTime;

    /** 过期时间 **/
    private Date expireTime;

    /** 启用状态(1.正常|2.未启用) **/
    private UsingState usingState;

    /** 数据状态:0为正常|其他为删除 **/
    private DataState dataState;

    /** 获取主键 **/
    public String getId() {
        return id;
    }

    /** 设置主键 **/
    public void setId(String id) {
        this.id = id;
    }

    /** 获取租户编号 **/
    public String getTenantCode() {
        return tenantCode;
    }

    /** 设置租户编号 **/
    public void setTenantCode(String tenantCode) {
        this.tenantCode = tenantCode;
    }

    /** 获取分类编号 **/
    public String getCategoryCode() {
        return categoryCode;
    }

    /** 设置分类编号 **/
    public void setCategoryCode(String categoryCode) {
        this.categoryCode = categoryCode;
    }

    /** 获取位置编号 **/
    public String getPlaceCode() {
        return placeCode;
    }

    /** 设置位置编号 **/
    public void setPlaceCode(String placeCode) {
        this.placeCode = placeCode;
    }

    /** 获取内容编号 **/
    public String getContentCode() {
        return contentCode;
    }

    /** 设置内容编号 **/
    public void setContentCode(String contentCode) {
        this.contentCode = contentCode;
    }

    /** 获取标题 **/
    public String getContentTitle() {
        return contentTitle;
    }

    /** 设置标题 **/
    public void setContentTitle(String contentTitle) {
        this.contentTitle = contentTitle;
    }

    /** 获取内容 **/
    public ContentValue getContentValue() {
        return contentValue;
    }

    /** 获取内容, force=是否强制返回非空对象 **/
    public ContentValue getContentValue(boolean force) {
        if (contentValue == null && force) {
            contentValue = new ContentValue();
        }
        return contentValue;
    }

    /** 设置内容 **/
    public void setContentValue(ContentValue contentValue) {
        this.contentValue = contentValue;
    }

    /** 获取描述 **/
    public String getContentDesc() {
        return contentDesc;
    }

    /** 设置描述 **/
    public void setContentDesc(String contentDesc) {
        this.contentDesc = contentDesc;
    }

    /** 获取排序值(越小越靠前) **/
    public Integer getSortIndex() {
        return sortIndex;
    }

    /** 设置排序值(越小越靠前) **/
    public void setSortIndex(Integer sortIndex) {
        this.sortIndex = sortIndex;
    }

    /** 获取选项 **/
    public ContentPublishOptions getOptions() {
        return options;
    }

    /** 获取选项, force=是否强制返回非空对象 **/
    public ContentPublishOptions getOptions(boolean force) {
        if (options == null && force) {
            options = new ContentPublishOptions();
        }
        return options;
    }

    /** 设置选项 **/
    public void setOptions(ContentPublishOptions options) {
        this.options = options;
    }

    /** 获取创建时间 **/
    public Date getCreateTime() {
        return createTime;
    }

    /** 设置创建时间 **/
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /** 获取激活时间 **/
    public Date getActiveTime() {
        return activeTime;
    }

    /** 设置激活时间 **/
    public void setActiveTime(Date activeTime) {
        this.activeTime = activeTime;
    }

    /** 获取过期时间 **/
    public Date getExpireTime() {
        return expireTime;
    }

    /** 设置过期时间 **/
    public void setExpireTime(Date expireTime) {
        this.expireTime = expireTime;
    }

    /** 获取启用状态(1.正常|2.未启用) **/
    public UsingState getUsingState() {
        return usingState;
    }

    /** 设置启用状态(1.正常|2.未启用) **/
    public void setUsingState(UsingState usingState) {
        this.usingState = usingState;
    }

    /** 获取数据状态:0为正常|其他为删除 **/
    public DataState getDataState() {
        return dataState;
    }

    /** 设置数据状态:0为正常|其他为删除 **/
    public void setDataState(DataState dataState) {
        this.dataState = dataState;
    }

    /**
     * 将当前对象转换为子类对象
     *
     * @param clazz 目标类型
     * @return 目标对象
     */
    public <T extends ContentPublishBean> T to(Class<T> clazz) {
        T instance;
        try {
            instance = clazz.newInstance();
        } catch (Exception e) {
            throw new IllegalArgumentException("Failed to create " + clazz.getSimpleName() + " instance.", e);
        }

        instance.setId(this.getId()); // 主键
        instance.setTenantCode(this.getTenantCode()); // 租户编号
        instance.setCategoryCode(this.getCategoryCode()); // 分类编号
        instance.setPlaceCode(this.getPlaceCode()); // 位置编号
        instance.setContentCode(this.getContentCode()); // 内容编号
        instance.setContentTitle(this.getContentTitle()); // 标题
        instance.setContentValue(this.getContentValue()); // 内容
        instance.setContentDesc(this.getContentDesc()); // 描述
        instance.setSortIndex(this.getSortIndex()); // 排序值(越小越靠前)
        instance.setOptions(this.getOptions()); // 选项
        instance.setCreateTime(this.getCreateTime()); // 创建时间
        instance.setActiveTime(this.getActiveTime()); // 激活时间
        instance.setExpireTime(this.getExpireTime()); // 过期时间
        instance.setUsingState(this.getUsingState()); // 启用状态(1.正常|2.未启用)
        instance.setDataState(this.getDataState()); // 数据状态:0为正常|其他为删除
        return instance;
    }

}